﻿/*
SINACOR - BMF&Bovespa
Arquivo: Exportacao.cs
Criado em: 28-jun-2010 08:28:55
Arquiteto Responsável: p-wgeneroso
*/
using System;
using System.Collections.Generic;
using System.Text;
using Sinacor.Infra.Core.ProcessManager.Server;
using PSE.ProcessManager.Server.InteligenceModules;
using PSE.ProcessManager.Common.Gateway;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using PSE.ProcessManager.Common.Process;
using Sinacor.Infra.Common.Validation;


namespace Sinacor.Process.Bovespa.Alocacao.Server.ProcessImplementation 
{
    public class Exportacao : SinacorBaseProcessServer<ProcessLogic.Exportacao>, ISimpleExecutionProcess 
	{
		#region Construtor

		public Exportacao()
		{
            while (!System.Diagnostics.Debugger.IsAttached)
                System.Threading.Thread.Sleep(1000);
            
            this.ProcessLogic.ExportacaoConcluida += new EventHandler<ProcessEventArgs<Sinacor.Process.Bovespa.Alocacao.ProcessEntity.ExportacaoResultado>>(ProcessLogic_ExportacaoConcluida);
		}

		#endregion

		#region Métodos

		private void EnviarMensagemExportacaoConcluida(ProcessEntity.ExportacaoResultado resultado)
		{
            this.SendMessage(
                                new Message<ProcessEntity.ExportacaoResultado>()
                                {
                                    ProcessId = this.Id,
                                    MessageId = ProcessEntity.Catalog.Exportacao.ExportacaoConcluida.MessageID,
                                    Parameter = resultado
                                });
		}

		/// 
		/// <param name="message"></param>
		public void ExportarAlocacao(BaseMessage message)
		{
            bool fail = false;

            try
            {
                //while (!System.Diagnostics.Debugger.IsAttached)
                //    System.Threading.Thread.Sleep(1000);

                if (!IsAborted)
                {
                    this.ProcessLogic.ExportarAlocacao(message.RetrieveParameter<ProcessEntity.Parameter.FiltroExportacaoAlocacao>());
                }
            }
            catch (Exception ex)
            {
                fail = true;
                HandleException(ex);
            }
            finally
            {
                Finalize(fail);
            }
		}

        private void ProcessLogic_ExportacaoConcluida(object sender, ProcessEventArgs<ProcessEntity.ExportacaoResultado> e)
        {
            this.EnviarMensagemExportacaoConcluida(e.Parameter);
        }

		#endregion

        #region ISimpleExecutionProcess Members

        public void Execute(BaseMessage message)
        {
            this.Finalize();
        }

        #endregion
    }

}